//package com.zx.mq.hello;
//
//import com.rabbitmq.client.Channel;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.util.concurrent.CompletableFuture;
//
///**
// * 当配置文件中ack配置为手动时，使用该类
// */
//@Component
//@RabbitListener(queues = "hello")
//public class HelloReceiverManualAck {
//
//    // 消费者-实际中消费者可单独部署一个服务
//    @RabbitHandler
//    public void process(String msg, Message message, Channel channel) {
//
//        // 顺序单个处理
//        deal(msg, message, channel);
//
//        // 异步并发处理,ack设置为手动时，可根据情况采取该方式
////        CompletableFuture.runAsync(()->deal(msg, message, channel));
//    }
//
//    private void deal(String msg, Message message, Channel channel) {
//
//        // 当配置文件中配置手动ack时,参数中需加入后面两个参数，在程序结束后手动发送ack
//        // https://blog.csdn.net/u010841296/article/details/52253684
//        // https://blog.csdn.net/james_searcher/article/details/70308565
//        System.out.println("Receiver doing...");
//        boolean result = false;
//        try {
//            Thread.sleep(1000);
//            System.out.println("over: "+msg);
//            result = true;
//
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
//        try {
//
//            if(result){
//                // 消息成功处理
//                channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
//            }else{
//                // 消息未成功处理:应该使用basicNack，并告诉mq将消息再次放入队列(也可使用reject丢弃)
//                channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
//            }
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//}
